//
//  QSNetworkTool.h
//  SinaWeiBo
//
//  Created by apple on 16/5/30.
//  Copyright © 2016年 song. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <AFNetworking.h>

/**
 *  网络状态
 */
typedef enum {
    QSNetworkStatusWifi,  // wifi
    QSNetworkStatusPhone, // 手机网络
    QSNetworkStatusNone   // 无网络
}QSNetworkStatus;

/**
 *  网络请求数据个格式
 */
typedef enum {
    QSRequestTypeJson = 0,  // Json格式
    QSRequestTypeHTTP = 1 // 二进制格式
}QSRequestTypes;

/**
 *  服务器返回数据，进行什么格式的处理后输出
 */
typedef enum {
    QSResponseTypeJson = 0,  // Json格式
    QSResponseTypeHTTP = 1  // 二进制格式
}QSResponseTypes;

/**
 *  请求成功数据回调的代码块
 *
 *  @param result 字典对象
 */
typedef void (^HttpResponseSuccessBlock) (id result);

/**
 *  请求失败回调的代码块
 *
 *  @param task        task
 *  @param error       错误实例
 *  @param description 错误描述
 */
typedef void (^HttpResponseErrorBlock) (NSURLSessionDataTask *task, NSError *error, NSString *description);

/**
 *  上传图片或文件的代码块
 *
 *  @param formData 文件格式
 */
typedef void (^HttpUploadDataBlock) (id<AFMultipartFormData> formData);


@interface QSNetworkTool : NSObject
/** 网络对象管理者 */
@property (nonatomic, strong) AFHTTPSessionManager *afManager;
/** 获取网络状态 */
@property (nonatomic, assign) NSInteger networkStatus;
/** 发起请求的数据格式 */
@property (nonatomic, assign) QSRequestTypes requestType;
/** 响应请求返回的数据格式 */
@property (nonatomic, assign) QSResponseTypes responseType;

/**
 *  创建单例
 */
+ (instancetype)shareNetworkInstance;

/**
 *  post
 *
 *  @param url           网络请求的接口
 *  @param param         请求所带的参数
 *  @param completeBlock 成功请求后得到的响应,此响应包括服务器业务逻辑异常结果,只接收服务器业务逻辑状态码为200的结果
 *  @param errorBlock    服务器响应不正常,网络连接失败返回的响应结果
 */
- (void)postWithURL:(NSString *)url Parameter:(NSMutableDictionary *)param Finish:(HttpResponseSuccessBlock)completeBlock Error:(HttpResponseErrorBlock)errorBlock;

/**
 *  get
 *
 *  @param url           网络请求的接口
 *  @param param         请求所带的参数
 *  @param completeBlock 成功请求后得到的响应
 *  @param errorBlock    网络连接失败返回的结果
 */
- (void)getWithURL:(NSString*)url Parameter:(NSMutableDictionary *)param Finish:(HttpResponseSuccessBlock)completeBlock Error:(HttpResponseErrorBlock)errorBlock;

/**
 *  post    上传图片和文件
 *
 *  @param url             网络请求的接口
 *  @param param           请求所带的参数
 *  @param uploadDataBlock 上传的数据
 *  @param completeBlock   成功请求后得到的响应
 *  @param errorBlock      网络连接失败返回的结果
 */
- (void)uploadDataWithUrl:(NSString *)url Parameter:(NSDictionary *)param updata:(HttpUploadDataBlock)uploadDataBlock Finish:(HttpResponseSuccessBlock)completeBlock Error:(HttpResponseErrorBlock)errorBlock;

/**
 *  取消当前请求队列的所有请求
 */
- (void)cancelAllOperations;
@end
